package cn.chinaunicom.sdsi.frm.workflow.sample.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import cn.chinaunicom.sdsi.frm.workflow.common.WorkflowConstants;
import cn.chinaunicom.sdsi.frm.workflow.sample.service.MultiInstanceService;

/**
 * 会签流程控制层示例，业务模块开发不必继承ActTestServiceImpl
 * 
 * @author liyh
 *
 */
@Service("multiInstanceService")
public class MultiInstanceServiceImpl extends ActTestServiceImpl implements MultiInstanceService {

	/**
	 * 示例依照流程图推进——主要为处理无需选环节只需指定处理人的会签节点前环节推进操作
	 * 
	 * @param processInstanceId
	 *            流程实例ID
	 * @param taskId
	 *            任务ID
	 * @param assignees
	 *            下环节任务处理人ID
	 * @param handleType
	 *            处理方式：1通过，2回退
	 * @param comment
	 *            用户处理意见
	 */
	@Override
	public void pushProcess(String processInstanceId, String taskId, List<String> assignees, int handleType,
			String comment) {

		/*
		 * 参数处理，handleType值为1时为通过，2时为回退 withdraw的值为1时为过程不可逆，0时为可撤回
		 */
		String handleTypeStr = "";
		if (handleType == 1) {
			handleTypeStr = WorkflowConstants.HANDLE_TYPE_PASS;
		} else if (handleType == 2) {
			handleTypeStr = WorkflowConstants.HANDLE_TYPE_BACK;
		}

		/*
		 * 首先处理业务逻辑，放在同一事务中
		 */
		Map<String, Object> vars = new HashMap<String, Object>();
		vars.put("assigneeList", assignees);
		vars.put("handleType", handleTypeStr);

		// 暂时根据处理人与目标定义确定执行方法
		// 如果目标方法为null且处理人为空串，执行自然推进方法
		workflowManager.pushProcess(taskId, processInstanceId, vars, comment, false);

	}

	/**
	 * 示例依照流程图推进——主要为处理无需选环节处理人无需指定下环节的会签环节
	 * 
	 * @param processInstanceId
	 *            流程实例ID
	 * @param taskId
	 *            任务ID
	 * @param handleType
	 *            处理方式：1通过，2回退
	 * @param comment
	 *            用户处理意见
	 */
	@Override
	public void pushProcess(String processInstanceId, String taskId, int handleType, String comment) {

		/*
		 * 参数处理，handleType值为1时为通过，2时为回退 withdraw的值为1时为过程不可逆，0时为可撤回
		 */
		String handleTypeStr = "";
		if (handleType == 1) {
			handleTypeStr = WorkflowConstants.HANDLE_TYPE_PASS;
		} else if (handleType == 2) {
			handleTypeStr = WorkflowConstants.HANDLE_TYPE_BACK;
		}

		/*
		 * 首先处理业务逻辑，放在同一事务中
		 */
		Map<String, Object> vars = new HashMap<String, Object>();
		vars.put("handleType", handleTypeStr);

		// 暂时根据处理人与目标定义确定执行方法
		// 如果目标方法为null且处理人为空串，执行自然推进方法
		workflowManager.pushProcess(taskId, processInstanceId, vars, comment, false);
	}
}
